/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package proliferacion.logica;

//Para el patron observador observable
import java.util.Observable;
import java.util.Observer;

import java.beans.PropertyChangeSupport;
import java.util.Random;

/**
 *
 * @author Usuario
 */
public class Poblacion implements Observer{
    
//    singleton
    private static Poblacion instancia;
//    fin singleton
    
    //Observador
    public void update1(Observable o, Object arg) {
        System.out.println("Se acaba de crear una celula.");
    }
    
    public static final String PROP_TAMANIO_POBLACION = "PROP_TAMANIO_POBLACION";
    public static final String PROP_CELULAS_DIVIDEN = "PROP_CELULAS_DIVIDEN";
    private int tamanio_poblacion;
    private int celulas_dividen;
    private final transient PropertyChangeSupport propertyChangeSupport = new java.beans.PropertyChangeSupport(this);
    
    public Poblacion() {
        tamanio_poblacion = 1;
        celulas_dividen = 0;
    }

    public Poblacion(int tamanio_poblacion, int celulas_dividen) {
        this.tamanio_poblacion = tamanio_poblacion;
        this.celulas_dividen = celulas_dividen;
    }

    /**
     * @return the tamanio_poblacion
     */
    public int getTamanio_poblacion() {
        return tamanio_poblacion;
    }

    /**
     * @param tamanio_poblacion the tamanio_poblacion to set
     */
    public void setTamanio_poblacion(int tamanio_poblacion) {
        int oldTamanio_poblacion = tamanio_poblacion;
        this.tamanio_poblacion = tamanio_poblacion;
        propertyChangeSupport.firePropertyChange(PROP_TAMANIO_POBLACION, oldTamanio_poblacion, tamanio_poblacion);
    }

    /**
     * @return the celulas_dividen
     */
    public int getCelulas_dividen() {
        return celulas_dividen;
    }

    /**
     * @param celulas_dividen the celulas_dividen to set
     */
    public void setCelulas_dividen(int celulas_dividen) {
        int oldCelulas_dividen = celulas_dividen;
        this.celulas_dividen = celulas_dividen;
        propertyChangeSupport.firePropertyChange(PROP_CELULAS_DIVIDEN, oldCelulas_dividen, celulas_dividen);
    }
    
//    singleton    
    public static Poblacion getIntancia(){
        if(instancia == null){
            instancia = new Poblacion();
        }
        return instancia;
    }
//    fin singleton

    public int cantidad_aleatoria(int tamanio_poblacion) {
        Random r = new Random();
        int cantidad = r.nextInt(tamanio_poblacion) + 1;
        return cantidad;
    }

    public void update(Observable o, Object arg) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
